//
//  MSEncryption.h
//  MSDemo
//
//  Created by mac on 2021/8/16.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
/** 加密/解密 */
@interface MSEncryption : NSObject

/**
 *  生成32位UUID,不带'-'
 *  @return 32位UUID
 */
+ (NSString *)ms_createUUID;


#pragma mark - MD5
/**
 *  md5加密
 *  @param input 要加密的字符串
 *  @return 32位md5字符串
 */
+ (NSString *)ms_md5:(NSString *)input;


#pragma mark - SHA
/**
 *  sha1加密
 *  @param input 要加密的字符串
 *  @return 加密后的字符串
 */
+ (NSString *)ms_sha1:(NSString *)input;
/**
 *  sha224加密
 *  @param input 要加密的字符串
 *  @return 加密后的字符串
 */
+ (NSString *)ms_sha224:(NSString *)input;
/**
 *  sha256加密
 *  @param input 要加密的字符串
 *  @return 加密后的字符串
 */
+ (NSString *)ms_sha256:(NSString *)input;
/**
 *  sha384加密
 *  @param input 要加密的字符串
 *  @return 加密后的字符串
 */
+ (NSString *)ms_sha384:(NSString *)input;
/**
 *  sha512加密
 *  @param input 要加密的字符串
 *  @return 加密后的字符串
 */
+ (NSString *)ms_sha512:(NSString *)input;


#pragma mark - DES
/**
 *  DES加密
 *  @param key  密钥
 *  @param data 加密数据
 *  @return 加密后的数据
 */
+ (NSData *)ms_DESEncryptWithKey:(NSString *)key
                            data:(NSData *)data;
/**
 *  DES解密
 *  @param key  密钥
 *  @param data 解密数据
 *  @return 解密后的数据
 */
+ (NSData *)ms_DESDecryptWithKey:(NSString *)key
                            data:(NSData *)data;


#pragma mark - AES
/**
 *  AES256加密
 *  @param key  密钥
 *  @param data 加密数据
 *  @return 加密后的数据
 */
+ (NSData *)ms_AES256EncryptWithKey:(NSString *)key
                               data:(NSData *)data;

/**
 *  AES256解密
 *  @param key  密钥
 *  @param data 解密数据
 *  @return 解密后的数据
 */
+ (NSData *)ms_AES256DecryptWithKey:(NSString *)key
                               data:(NSData *)data;


#pragma mark - Base64
/**
 *  NSData转Base64
 *  @param data 要编码的数据
 *  @return base64字符串
 */
+ (NSString *)ms_base64EncodedStringWithData:(NSData *)data;
/**
 *  Base64转NSData
 *  @param base64String base64字符串
 *  @return 解码后数据
 */
+ (NSData *)ms_dataWithBase64EncodedString:(NSString *)base64String;

/**
 *  NSString转Base64
 *  @param string 要编码的数据
 *  @return base64字符串
 */
+ (NSString *)ms_base64EncodedString:(NSString *)string;

/**
 *  Base64转NSString
 *  @param base64String base64字符串
 *  @return 解码后数据
 */
+ (NSString *)ms_stringWithBase64Encoded:(NSString *)base64String;

@end

NS_ASSUME_NONNULL_END
